{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "bdd8c739-eb43-4241-a89c-f92b67c8c293",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最优参数 θ： [4.21509668 2.77011383]\n",
      "最小代价 J(θ)： 0.40329228198400024\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy.optimize import minimize\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rc(\"font\", family='Microsoft YaHei')\n",
    "\n",
    "# 创建训练数据：y = 4 + 3x + 噪声\n",
    "np.random.seed(42)\n",
    "m = 100\n",
    "X = 2 * np.random.rand(m, 1)\n",
    "y = 4 + 3 * X[:, 0] + np.random.randn(m)\n",
    "\n",
    "# 添加截距项（常数项）\n",
    "X = np.c_[np.ones((m, 1)), X]  # shape (100, 2)\n",
    "theta_init = np.zeros(X.shape[1])  # 初始参数 [0, 0]\n",
    "\n",
    "def costFunction_linear(theta, X, y):\n",
    "    m = len(y)\n",
    "    predictions = X @ theta\n",
    "    errors = predictions - y\n",
    "    cost = (1 / (2 * m)) * np.sum(errors ** 2)\n",
    "    return cost\n",
    "\n",
    "\n",
    "result = minimize(fun=costFunction_linear, x0=theta_init, args=(X, y), method='BFGS')\n",
    "\n",
    "theta_opt = result.x\n",
    "print(\"最优参数 θ：\", theta_opt)\n",
    "print(\"最小代价 J(θ)：\", result.fun)\n",
    "\n",
    "# 预测\n",
    "y_pred = X @ theta_opt\n",
    "\n",
    "# 可视化\n",
    "plt.scatter(X[:, 1], y, label=\"真实值\")\n",
    "plt.plot(X[:, 1], y_pred, color='red', label=\"拟合直线\")\n",
    "plt.xlabel(\"x\")\n",
    "plt.ylabel(\"y\")\n",
    "plt.title(\"线性回归拟合效果\")\n",
    "plt.legend()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c56c5411-8048-4652-af65-6840484f7bf9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 6.33428778  9.40527849  8.48372443  5.60438199  4.71643995  5.29307969\n",
      "  5.82639572  8.67878666  6.79819647  7.74667842  5.03890908 10.14821022\n",
      "  8.46489564  5.7873021   5.18802735  6.06907205  5.12340036  6.82087644\n",
      "  6.19956196  4.28385989  7.96723765  5.09801844  5.75798135  5.96358393\n",
      "  5.32104916  8.29041045  4.85532818  6.28312936  7.3932017   4.68275333\n",
      "  9.53145501  5.19772255  4.64785995  9.61886731  7.87502098  8.82387021\n",
      "  5.88791282  7.0492748   7.91303719  6.9424623   4.69751764  5.80238342\n",
      "  5.34915394 10.20785545  6.34371184  7.06574625  7.27306077  5.71855706\n",
      "  7.86711877  7.29958236  8.82697144  8.08449921  9.73664501  8.86548845\n",
      "  6.03673644  9.59980838  3.4686513   5.64948961  3.3519395   7.50191639\n",
      "  5.54881045  5.30603267  9.78594227  4.90965564  5.91306699  8.56331925\n",
      "  3.23806212  8.99781574  4.70718666 10.70314449  7.3965179   3.87183748\n",
      "  4.55507427  9.18975324  8.49163691  8.72049122  7.94759736  4.67652161\n",
      "  6.44386684  3.98086294 11.04439507  8.21362168  4.79408465  5.03790371\n",
      "  4.89121226  6.73818454  9.53623265  7.00466251 10.28665258  7.24607048\n",
      "  5.53962564 10.17626171  8.31932218  6.61392702  7.73628865  6.14696329\n",
      "  7.05929527  6.90639808  4.42920556  5.47453181]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy.optimize import minimize\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rc(\"font\", family='Microsoft YaHei')\n",
    "\n",
    "# 创建训练数据：y = 4 + 3x + 噪声\n",
    "np.random.seed(42)\n",
    "m = 100\n",
    "X = 2 * np.random.rand(m, 1)\n",
    "y = 4 + 3 * X[:, 0] + np.random.randn(m)\n",
    "print(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2b8972b6-db0c-4992-910b-0eaa6b998762",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
